package com.aynu.webshop.web.util;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class ViewModelUtil {

	/**
	 * 
	 * @param model
	 * @param request
	 * @return 方法说明：将实体类的属性值以集合的形式返回
	 */
	public static <T> List<List<Object>> tranceModelList(List<T> list)
			throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		List<List<Object>> lls = new ArrayList<List<Object>>();// 封装实体的集合
		for (T t : list) {
			lls.add(testReflect(t));
		}
		return lls;
	}

	// 获取实体类的属性，并将其封装成List集合返回
	private static List<Object> testReflect(Object model)
			throws NoSuchMethodException, IllegalAccessException, IllegalArgumentException, InvocationTargetException {
		Field[] field = model.getClass().getDeclaredFields(); // 获取实体类的所有属性，返回Field数组
		List<Object> list = new ArrayList<Object>();
		for (int j = 0; j < field.length; j++) { // 遍历所有属性
			String name = field[j].getName(); // 获取属性的名字
			// name = name.substring(0, 1).toUpperCase() + name.substring(1); //
			// 将属性的首字符大写，方便构造get，set方法
			name = name.substring(0, 1) + name.substring(1); // 将属性的首字符大写，方便构造get，set方法
			// String type = field[j].getGenericType().toString(); //获取属性的类型
			Method m = model.getClass().getMethod("get" + name);
			Object value = (Object) m.invoke(model); // 调用getter方法获取属性值
			if (value != null) {
				list.add(value);
			}
		}
		return list;
	}
}
